;; C语言相关设置
(require 'init-package)

;; (dolist (hook '(c-mode-hook c-mode-common-hook c++-mode-hook))
;;   (add-hook hook #'my/c-setup))
(add-hook 'c-mode-common-hook (lambda ()
                                ;; 设置代码风格
                                (c-set-style "k&r")
                                (setq-local c-basic-offset 4
                                            tab-width 4)
                                (eglot-ensure)))

(when (treesit-available-p)
  (setq-local c-source-alist
              '((c   . ("https://github.moeyy.xyz/https://github.com/tree-sitter/tree-sitter-c"))
                (cpp . ("https://github.moeyy.xyz/https://github.com/tree-sitter/tree-sitter-cpp"))
                ))
  (dolist (source c-source-alist)
    (push source treesit-language-source-alist)
    (unless (treesit-ready-p (car source))
      (treesit-install-language-grammar (car source))))
  (add-to-list 'major-mode-remap-alist '(c-mode . c-ts-mode))
  (add-to-list 'major-mode-remap-alist '(c++-mode . c++-ts-mode))
  (add-to-list 'major-mode-remap-alist '(c-or-c++-mode . c-or-c++-ts-mode))
  (add-hook 'c-ts-base-mode-hook (lambda ()
                                   (setq-local c-ts-mode-indent-style "k&r"
                                               c-ts-mode-indent-offset 4
                                               tag-width 4
                                               )
                                   (eglot-ensure)
                                   ))
  )

;; 使用 eglot 作为 LSP客户端，clangd 作为服务端
;; 可能通过 .clang-format 设置 clangd 格式化代码的风格，~/.clang-format为全局设置
;; ~/.config/clangd/config.yaml 文件全局配置 clangd 的行为。
;; 还可以通过 compile_commands.json 文件设置，
;; 例如 gcc -c main.c -o main.o 这样的指令。
;; 只需要在项目的 根目录或者 build 目录中存在一个 compile_commands.json，通过这个文件，
;; clangd 就知道需要找的库在哪里，你用的是哪个编译器（比如 xxxx-gcc ... -I/xxx/xxx）。

(provide 'init-c)
